package com.lyx.com.lyx.rpc.test.consumer.codec;

import com.lyx.com.lyx.rpc.test.consumer.codec.init.RpcTestConsumerInitializer;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;

import java.util.concurrent.TimeUnit;

/**
 * @Author by lyx
 */
public class RpcTestConsumer {
    public static void main(String[] args) throws InterruptedException {
        /*
         * 启动服务消费者并连接到服务提供者，后续会自动触发RpcTestConsumerHandler类中的channelActive()方法，
         * 向服务提供者发送数据，并在RpcTestConsumerHandler类中的channelRead0()方法中接收服务提供者响应的数据。
         */
        EventLoopGroup bossGroup = new NioEventLoopGroup(4);
        Bootstrap bootstrap = new Bootstrap();
        try {
            bootstrap.group(bossGroup)
                .channel(NioSocketChannel.class)
                .handler(new RpcTestConsumerInitializer())
                .connect("localhost", 27800).sync();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 首先让线程休眠2秒中后再优雅关闭服务提供者。如果不休眠一段时间，会造成服务消费者和服务提供者正在进行数据交互时，关闭服务消费者，此时会抛出异常。
            Thread.sleep(2000);
            bossGroup.shutdownGracefully();
        }
    }
}
